﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//1.calloc；
void testCalloc()
{
	int* p = calloc(10, sizeof(int));
	for (int i = 0; i < 10; ++i)
	{
		//2.只要是连续的内存空间，都可以使用p[i]下标这种方式操作；
		p[i] = i + 1;
	}
	for (int i = 0; i < 10; ++i)
	{
		printf("3.使用calloc申请内存，并写入值，即p[i]为：%d\n", p[i]);//1，2，..，10
	}
	if (p != NULL)
	{
		free(p);
		p = NULL;
	}
}
//4.realloc;
void testRealloc()
{
	int* p = malloc(sizeof(int) * 10);
	for (int i = 0; i < 10; ++i)
	{
		//2.只要是连续的内存空间，都可以使用p[i]下标这种方式操作；
		p[i] = i + 1;
	}
	for (int i = 0; i < 10; ++i)
	{
		printf("5.使用malloc申请内存，并写入值，即p[i]为：%d\n", p[i]);//1，2，..，10
	}
	printf("6.此时指针p指向内存末尾，输出指针变量p[9]地址：%d\n", p);//7235800
	p = realloc(p, sizeof(int) * 200);//10-->200
	printf("7.使用realloc给p指向的内存空间进行扩展，此时p的地址：%d\n", p);//7235800-->7283840
	for (int i = 0; i < 15; ++i)
	{
		printf("8.使用malloc申请内存，此时不是在p后面补充内存，而是开辟210，拷贝10个内存，即p[i]为：%d\n", p[i]);
		////1，2，..，10，-842150451，-842150451，-842150451...
	}
}

//main193：堆内存分配calloc和realloc
int main193()
{
	testCalloc();
	testRealloc();

	system("pause");
	return EXIT_SUCCESS;
}